package com.creator.paas.common;

/**
 * @Author: Hank.GUO
 * @Date: 2025/8/23 12:07
 * @Email: guohaihang0512@163.com
 * @Description
 */
import lombok.Data;

import java.io.Serializable;

/**
 * 统一API响应结果包装类
 */
@Data
public class ApiResponse<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    // 状态码：200成功，其他表示错误
    private int code;

    // 响应信息：成功时为"success"，错误时为具体错误信息
    private String message;

    // 响应数据：成功时返回具体数据，错误时可能为null
    private T data;

    // 时间戳
    private long timestamp;

    private ApiResponse(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
        this.timestamp = System.currentTimeMillis();
    }

    /**
     * 成功响应，带数据
     */
    public static <T> ApiResponse<T> success(T data) {
        return new ApiResponse<>(200, "success", data);
    }

    /**
     * 成功响应，不带数据
     */
    public static <T> ApiResponse<T> success() {
        return new ApiResponse<>(200, "success", null);
    }

    /**
     * 错误响应
     */
    public static <T> ApiResponse<T> error(int code, String message) {
        return new ApiResponse<>(code, message, null);
    }

    /**
     * 404资源未找到
     */
    public static <T> ApiResponse<T> notFound(String message) {
        return new ApiResponse<>(404, message != null ? message : "Resource not found", null);
    }

    /**
     * 参数错误
     */
    public static <T> ApiResponse<T> badRequest(String message) {
        return new ApiResponse<>(400, message != null ? message : "Bad request", null);
    }

    /**
     * 服务器内部错误
     */
    public static <T> ApiResponse<T> serverError(String message) {
        return new ApiResponse<>(500, message != null ? message : "Internal server error", null);
    }
}

